# import pandas as pd
from math import floor


# def 读取技能系数表() -> dict:
#     result = {}
#     df = pd.read_excel("./技能对照表(1).xlsx")
#     rows, columns = df.shape
#     for i in range(0, rows - 1):
#         temp = df.loc[i].to_dict()
#         result[temp["统计名称"]] = {
#             "基础伤害": temp["游戏描述基础伤害"],
#             "基础伤害浮动": temp["游戏描述浮动"],
#             "攻击系数": temp["系数"],
#             "武伤系数": temp["武伤系数"],
#             "无视防御": temp["无视防御"],
#             "技能破招系数": temp["技能破招系数"],
#             "本体增伤": temp["增伤"]
#         }
#     # print(result["蚀肌弹"])
#     return result


def 目标最终承伤计算(目标等级: int, 无视防御A: float, 无视防御B: float = 0):
    自身等级 = 120
    目标等级减伤 = (目标等级 - 自身等级) * 0.05
    目标防御减伤 = 0.75
    无视防御 = 1 - (1 - 无视防御A) * (1 - 无视防御B)
    if 目标等级 == 121:
        目标防御减伤 = min(11073 * (1 - 无视防御) / (11073 * (1 - 无视防御) + 44291.7), 0.75)
    elif 目标等级 == 122:
        目标防御减伤 = min(15528 * (1 - 无视防御) / (15528 * (1 - 无视防御) + 46582.65), 0.75)
    elif 目标等级 == 123:
        目标防御减伤 = min(26317 * (1 - 无视防御) / (26317 * (1 - 无视防御) + 48873.6), 0.75)
    elif 目标等级 == 124:
        目标防御减伤 = min(27550 * (1 - 无视防御) / (27550 * (1 - 无视防御) + 51164.55), 0.75)
    return (1 - 目标等级减伤) * (1 - 目标防御减伤)


def 最终伤害计算(基础伤害: float, 基础伤害浮动: float,
                 攻击系数: float, 最终攻击: float,
                 武伤系数: float, 武器伤害: float,
                 破招: float, 技能破招系数: float,
                 会心: float, 会效: float,
                 破防: float, 无双: float,
                 本体增伤: float, 目标易伤: float,
                 全局破招系数: float, 非侠: float,
                 目标等级: int, 无视防御: float) -> float:
    # print((1 - 目标等级减伤) * (1 - 目标防御减伤))
    print(目标最终承伤计算(目标等级, 无视防御))
    return (基础伤害 + 基础伤害浮动 / 2 + 最终攻击 * 攻击系数 + 武器伤害 * 武伤系数 + 破招 * 全局破招系数 * 技能破招系数) \
        * (会心 * 会效 + (1 - 会心) * 1) \
        * (1 + 破防) \
        * (1 + 无双) \
        * 目标最终承伤计算(目标等级, 无视防御) * 本体增伤 * 目标易伤 * 非侠


def 字典武器伤害计算(全部属性字典: dict, 算法: str) -> float:
    result = floor((全部属性字典['武器伤害'] * 全部属性字典['武伤系数'])) \
             * (1 + 全部属性字典['外功破防']) \
             * (1 + 全部属性字典['无双']) \
             * 目标最终承伤计算(全部属性字典['目标等级'], 全部属性字典['无视防御A'], 全部属性字典['无视防御B']) * 全部属性字典['本体增伤'] * \
             全部属性字典['目标易伤'] * 全部属性字典['非侠']
    会心 = min(全部属性字典['外功会心'], 1)
    会效 = min(全部属性字典['外功会效'], 3)
    if 算法 == "期望":
        return result * (会心 * 会效 + (1 - 会心) * 1)
    elif 算法 == "会心":
        return result * 会效
    elif 算法 == "不会心":
        return result


def 字典平A伤害计算(全部属性字典: dict, 算法: str) -> float:
    result = floor((全部属性字典['基础伤害'] + 全部属性字典['基础伤害浮动'] / 2 +
              全部属性字典['外功最终攻击'] * 全部属性字典['攻击系数'] +
              全部属性字典['破招'] * 全部属性字典['全局破招系数'] * 全部属性字典['技能破招系数'])) \
             * (1 + 全部属性字典['外功破防']) \
             * (1 + 全部属性字典['无双']) \
             * 目标最终承伤计算(全部属性字典['目标等级'], 全部属性字典['无视防御A'], 全部属性字典['无视防御B']) * 全部属性字典['本体增伤'] * \
             全部属性字典['目标易伤'] * 全部属性字典['非侠']
    会心 = min(全部属性字典['外功会心'], 1)
    会效 = min(全部属性字典['外功会效'], 3)
    if 算法 == "期望":
        return result * (会心 * 会效 + (1 - 会心) * 1)
    elif 算法 == "会心":
        return result * 会效
    elif 算法 == "不会心":
        return result


def 字典技能伤害计算(全部属性字典: dict, 算法: str) -> float:
    result = floor((全部属性字典['基础伤害'] + 全部属性字典['基础伤害浮动'] / 2 +
              全部属性字典['最终攻击'] * 全部属性字典['攻击系数'] +
              全部属性字典['破招'] * 全部属性字典['全局破招系数'] * 全部属性字典['技能破招系数'])) \
             * (1 + 全部属性字典['毒性内功破防']) \
             * (1 + 全部属性字典['无双']) \
             * 目标最终承伤计算(全部属性字典['目标等级'], 全部属性字典['无视防御A'], 全部属性字典['无视防御B']) * 全部属性字典['本体增伤'] * \
             全部属性字典['目标易伤'] * 全部属性字典['非侠']
    会心 = min(全部属性字典['外功会心'], 1)
    会效 = min(全部属性字典['外功会效'], 3)
    if 算法 == "期望":
        return result * (会心 * 会效 + (1 - 会心) * 1)
    elif 算法 == "会心":
        return result * 会效
    elif 算法 == "不会心":
        return result


def 字典最终伤害计算(技能名: str, 全部属性字典: dict, 算法: str) -> float:
    # result = (全部属性字典['基础伤害'] + 全部属性字典['基础伤害浮动'] / 2 +
    #           全部属性字典['最终攻击'] * 全部属性字典['攻击系数'] +
    #           全部属性字典['武器伤害'] * 全部属性字典['武伤系数'] +
    #           全部属性字典['破招'] * 全部属性字典['全局破招系数'] * 全部属性字典['技能破招系数']) \
    #          * (1 + 全部属性字典['毒性内功破防']) \
    #          * (1 + 全部属性字典['无双']) \
    #          * 目标最终承伤计算(全部属性字典['目标等级'], 全部属性字典['无视防御']) * 全部属性字典['本体增伤'] * \
    #          全部属性字典['目标易伤'] * 全部属性字典['非侠']
    if 技能名 == "罡风镖法":
        # print("最终承伤：", 目标最终承伤计算(全部属性字典['目标等级'], 全部属性字典['无视防御']))
        # print("[%s]技能伤害：" % 技能名, floor(字典平A伤害计算(全部属性字典, 算法)), "  武器伤害：", floor(字典武器伤害计算(全部属性字典, 算法)))
        return floor(字典平A伤害计算(全部属性字典, 算法)) + floor(字典武器伤害计算(全部属性字典, 算法))
    else:
        # print("最终承伤：", 目标最终承伤计算(全部属性字典['目标等级'], 全部属性字典['无视防御']))
        # print("[%s]技能伤害：" % 技能名, floor(字典技能伤害计算(全部属性字典, 算法)), "  武器伤害：", floor(字典武器伤害计算(全部属性字典, 算法)))
        return floor(字典技能伤害计算(全部属性字典, 算法)) + floor(字典武器伤害计算(全部属性字典, 算法))

#
# damage = 最终伤害计算(基础伤害=135, 基础伤害浮动=0, 攻击系数=0.75625, 最终攻击=40926, 武伤系数=1, 武器伤害=4867, 破招=418,
#              技能破招系数=0, 会心=0.4299, 会效=2.0545, 破防=0.4648, 无双=0.3965, 目标等级=124, 无视防御=0.5,
#              本体增伤=1.39, 目标易伤=1, 非侠=1.22, 全局破招系数=13.1925)
#
# 读取技能系数表()


# a = 131587
# b = 492
# print(a&b)